/*
 * XSnapshot.java, created on Oct 20, 2005
 * 
 * Copyright (c) 2005 - 2007
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.xfc.model;

import java.beans.PropertyChangeListener;
import java.io.Serializable;

import org.xfc.util.XJavaBean;

// TODO: change the name to XModel? XObject? XDomainObject?

// TODO: does setObjectId() need to be public?

// TODO: doc, these are POJOs.


/**
 *
 * @author Devon Carew
 */
public interface XSnapshot
	extends XJavaBean, Serializable
{
	
	/**
	 * @return Returns the active.
	 */
	public boolean isActive();

	/**
	 * @param active The active to set.
	 */
	public void setActive(boolean active);

	/**
	 * @return Returns the deleted.
	 */
	public boolean isDeleted();

	/**
	 * @param deleted The deleted to set.
	 */
	public void setDeleted(boolean deleted);

	/**
	 * @return Returns the modified.
	 */
	public boolean isModified();

	/**
	 * @param modified The modified to set.
	 */
	public void setModified(boolean modified);

	/**
	 * @return Returns the id.
	 */
	public Long getId();

	/**
	 * @param id The id to set.
	 */
	public void setId(Long id);

	/**
	 * @return Returns the objectStamp.
	 */
	public long getObjectStamp();

	/**
	 * @param objectStamp The objectStamp to set.
	 */
	public void setObjectStamp(long objectStamp);

	// Property change support
	
	/**
	 * @param listener
	 * @see org.xfc.util.XJavaBean#addPropertyChangeListener(PropertyChangeListener)
	 */
	public void addPropertyChangeListener(PropertyChangeListener listener);

	/**
	 * @param property
	 * @param listener
	 */
	public void addPropertyChangeListener(String property, PropertyChangeListener listener);

	/**
	 * @param listener
	 * @see org.xfc.util.XJavaBean#removePropertyChangeListener(PropertyChangeListener)
	 */
	public void removePropertyChangeListener(PropertyChangeListener listener);

	/**
	 * @param property
	 * @param listener
	 */
	public void removePropertyChangeListener(String property, PropertyChangeListener listener);
	
}